package cart;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.connection.jedis.JedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;

/**
 * @author XiaoDongLei
 * @Package com.vonzhou.springinaction.knights
 * @date 2018/4/1
 * @Description: Redis是一种特殊类型的数据库，它被称之为key-value存储。顾名思义，key-value存储保存的是键值对。实际上，key-value存储与哈希Map有很大的相似性。可以不太夸张地说，它们就是持久化的哈希Map。
 *
 * 因此，Spring Data的自动Repository生成功能并没有应用到Redis上。不过，Spring Data的另外一个关键特性，也就是面向模板的数据访问，能够在使用Redis的时候，为我们提供帮助。
 *
 * 可以看到，我们构建了一个RedisCacheManager，这是通过传递一个RedisTemplate实例作为其构造器的参数实现的。
 */
@Configuration
public class RedisConfig {


//	通过默认构造器创建的连接工厂会向localhost上的6379端口创建连接，并且没有密码。如果你的Redis服务器运行在其他的主机或端口上，在创建连接工厂的时候，可以设置这些属性：
//	@Bean
//	public RedisConnectionFactory redisCF() {
//		return new JedisConnectionFactory();
//	}


	/**
	 * Redis连接工厂bean
	 * @return
	 */
	@Bean
	public RedisConnectionFactory redisCF() {
		JedisConnectionFactory jedisConnectionFactory = new JedisConnectionFactory();
		jedisConnectionFactory.setHostName("192.168.1.111");
		jedisConnectionFactory.setPort(6379);
		jedisConnectionFactory.setPassword("123456");
		return jedisConnectionFactory;
	}


	/**
	 * RedisTemplate bean
	 * @param redisCF
	 * @return
	 */
	@Bean
	public RedisTemplate<String, Product> redisTemplate(RedisConnectionFactory redisCF) {
		RedisTemplate<String, Product> redis = new RedisTemplate<String, Product>();
		redis.setConnectionFactory(redisCF);
		return redis;
	}

}
